class MyMap {
    constructor(iterable = []) {
      this.store = {};
  
      // 如果传入了可迭代对象（如数组），则初始化Map
      iterable.forEach(([key, value]) => this.set(key, value));
    }
  
    get(key) {
      const hashKey = this._getHashKey(key);
      return this.store.hasOwnProperty(hashKey) ? this.store[hashKey] : undefined;
    }
  
    set(key, value) {
      const hashKey = this._getHashKey(key);
      this.store[hashKey] = value;
      return this; // 返回自身以支持链式调用
    }
  
    has(key) {
      const hashKey = this._getHashKey(key);
      return this.store.hasOwnProperty(hashKey);
    }
  
    delete(key) {
      const hashKey = this._getHashKey(key);
      if (this.has(key)) {
        delete this.store[hashKey];
        return true;
      }
      return false;
    }
  
    clear() {
      this.store = {};
    }
  
    size() {
      return Object.keys(this.store).length;
    }
  
    _getHashKey(key) {
      // 简化的哈希函数，实际Map内部实现更复杂
      return JSON.stringify(key);
    }
  
    // 可选：模拟原生Map的部分迭代器方法
    [Symbol.iterator]() {
      let index = 0;
      const keys = Object.keys(this.store);
  
      return {
        next: () => {
          if (index >= keys.length) {
            return { done: true };
          }
          const key = JSON.parse(keys[index]);
          const value = this.get(key);
          index++;
          return { value: [key, value], done: false };
        }
      };
    }
  }
  
  // 使用示例：
  const myMap = new MyMap();
  myMap.set('name', 'Alice');
  myMap.set({ id: 1 }, 'Bob');
  console.log(myMap.get('name')); // 输出: "Alice"
  console.log(myMap.has({ id: 1 })); // 输出: true
  
  for (let [key, value] of myMap) {
    console.log(key, value);
  }

  /**
   * 请注意，这个模拟实现非常简化，尤其是关于键的处理和迭代器部分，
   * 真实的Map内部会使用更复杂的哈希算法来确保键的唯一性，并且具有更好的性能。
   * 此外，上述代码中 _getHashKey 方法只是简单地将键转换为字符串表示，这并不适用于所有类型或场景，特
   * 别是对于引用类型的键可能会出现意料之外的行为。
   */